/**
 * 结算面板核心
 */

// 完成全选功能(全选或者取消全选)
$('#shop_cart > ul:first > li:first > input').on('click',function(){
	// 获取每一个按钮,如果都是选中的，则全部取消选中
	if(this.checked){
		// 全部设置选中
		$.each($('.shop_item > input:checkbox'),(index,item)=>{
			if(!item.checked){
				item.click()
			}
		})
		// 下方的单选框
		$('#select_shopping_item').prop('checked',true)
	}else{
		// 全部取消选中
		$.each($('.shop_item > input:checkbox'),(index,item)=>{
			if(item.checked){
				item.click()
			}
		})
		// 下方的单选框
		$('#select_shopping_item').prop('checked',false)
	}
	
})

// 完成全选功能(全选或者取消全选)
$('#select_shopping_item').on('click',function(){
	// 获取每一个按钮,如果都是选中的，则全部取消选中
	if(this.checked){
		// 全部设置选中
		$.each($('.shop_item > input:checkbox'),(index,item)=>{
			if(!item.checked){
				item.click()
			}
		})
		// 下方的单选框
		$('#shop_cart > ul:first > li:first > input').prop('checked',true)
	}else{
		// 全部取消选中
		$.each($('.shop_item > input:checkbox'),(index,item)=>{
			if(item.checked){
				item.click()
			}
		})
		// 下方的单选框
		$('#shop_cart > ul:first > li:first > input').prop('checked',false)
	}
	
})

// 给输入数量框绑定输入时间，让其只能输入数字
$('.num').on('input',function() {
	// 拿到值
	const value = $('.num').val()
	if(/\D+/.test(value)){
		// 包含了非数字就替换
		 $('.num').val(value.replace(/\D+/,''))
	}
}).on('blur', function() {
	// 失去焦点的时候去数据库查询库存是否足够
	$.post(
			'getstock',
			{'bookId':$(this).parent().parent().attr('index')},
			data=>{
				if(data){
					// 拿到当前数量
					const num = parseInt($(this).val())
					// 拿到单价
					const price = $('.shop_item').has(this).find('.item_price > span').text()
					// 修改库存最大值
					if( num > data){
						$(this).val(data)
					}else{ // 库存足够设置新值
						$('.shop_item').has(this).find('.item_new_price > span').text((price * num).toFixed(2))
					}
					
					// 先判断当前是否被选中
					if($('.shop_item').has(this).find('input:checkbox')[0].checked){
						// 如果已经选中了,先得到原始量
						const oldNum = parseInt($(this).attr('index'))
						// 得到变化的（现在的减去原来的）
						const changeNum = parseInt($(this).val()) - oldNum
						// 从新设置现在的数量
						$(this).attr('index',$(this).val())
						
						// 先设置总数量
						$('#select_num').text(parseInt($('#select_num').text())+changeNum)
						// 再设置总价格
						$('#submit_price').text( (parseFloat($('#submit_price').text())+changeNum*price).toFixed(2))
						
					}else{
						// 如果还未选中，直接触发单机事件
						$('.shop_item').has(this).find('input:checkbox').click()
					}
					
				}
			}
	)
	
})

// 设置复选框被选中时，触发的事件
$('.shop_item > input:checkbox').on('click',function(){
	// 得到当前数量
	const nowNum = parseInt($(this).parent().find('.item_num > .num').val())
	// 记录当前数量
	$(this).parent().find('.item_num > .num').attr('index',nowNum)
	
	// 得到当前价格
	const nowPrice =  parseFloat($(this).parent().find('.item_new_price > span').text())
	
	if(this.checked){
		// 加上当前数量 
		$('#select_num').text(parseInt($('#select_num').text())+nowNum)
		// 加上当前价格  
		$('#submit_price').text( (parseFloat($('#submit_price').text())+nowPrice).toFixed(2))
	}else{ // 取消选中
		// 减去当前数量 
		$('#select_num').text(parseInt($('#select_num').text())-nowNum)
		// 减去当前价格  
		$('#submit_price').text( (parseFloat($('#submit_price').text())-nowPrice).toFixed(2) )
	}
	
	// 遍历当前所有的项
	$.each($('.shop_item > input:checkbox'),(index,item)=>{
		if(item.checked){
			// 设置样式
			$('#submit').off('click').on('click',clickToSubmit).css({'backgroundColor':'red','cursor':'pointer'})
			return false
		}else{
			$('#submit').off('click').removeAttr('style')
		}
	})
	
})


// 完成点击增加或删除数量功能，当数量等于0时，再点击确定就删除订单
$('.item_num').on('click','a',function(e) {
	// 当前被委托的对象
	const parent = e.delegateTarget
	
	// 先获取值
	const value = parseInt($(parent).children('input').val())

	// 如果点击的是左就减一
	if( $(this).text() === '-' ){
		// 如果是1就弹出提示框，确定就删除这条购物车记录
		if(value == 1){
			if(confirm('是否从购物车删除这条记录？')){
				// 拿到要删除的记录图书id,(只要数字)
				const id = $('.shop_item').has(this).find('a:first').attr('href').replace(/\D+/,'')
				// 发送delete请求
				myStandardInput('shopping/'+id,'delete')
				
			}else{
				return
			}
			
		}else{
			// 进行设置
			$(parent).children('input').val(value-1)
		}
	}else{
		// 如果点击的是右就加一
		$(parent).children('input').val(value+1)
	}
	
	// 让输入的内容失去焦点
	$(parent).children('.num').blur()
})



// 完成单个删除功能
$('.item_to_delete').on('click',function() {
	// 拿到要删除的记录图书id,(只要数字)
	const id = $(this).parent().find('a:first').attr('href').replace(/\D+/,'')
	
	if(confirm('是否要从购物车中删除这条记录？')){
		
		myStandardInput('shopping/'+id,'DELETE')
	}
})

// 完成批量删除功能
$('#shop_to_submit > a:first').on('click',function(){
	// 准备数组存放所有的id
	const bookIds = new Array()
	// 得到所有选择的id
	$.each($('.shop_item'),(index,item)=>{
		if($(item).children('input')[0].checked){
			// 拿到要删除的记录图书id,(只要数字)
			const id = $(item).find('a:first').attr('href').replace(/\D+/,'')
			// 放入数组
			bookIds.push(id)
		}
	})
	console.log(JSON.stringify(bookIds))
	// 发送带参数请求
	myStandardInput('shopping/',method='delete',{'bookIds':JSON.stringify(bookIds)})
})


/**
 * 封装的模拟表单方法
 * @param url
 * @param method
 * @param args
 * @returns
 */
function myStandardInput(url,method='post',args=0){
  var form = $("<form method="+method+"></form>"),input;
  form.attr({"action":url});
  $.each(args,function(key,value){
      input = $("<input type='hidden'>");
      input.attr({"name":key});
      input.val(value);
      form.append(input);
  });
  $(document.body).append(form);
  form.submit();
}


// 提交订单的函数
//准备一个List用来封装数据
let order = new Array()
function clickToSubmit() {
	// 将第一层隐藏
	$('#shop_content').hide()
	// 设置样式
	$('#logo_and_progress > span').removeAttr('class','active')
	// 第二次xianshi
	$('#check_shop').show()
	$('#logo_and_progress > span:eq(1)').attr('class','active')
	
	// 先清空
	$('.shopping_order').remove()
	
	// 生成订单数据
	$.each($('.shop_item'),(index,item)=>{
		if($(item).children('input:first')[0].checked){
			const image = '<td><img src="'+$(item).children('img').attr('src')+'"/></td>'
			const title = '<td>'+$(item).children('.item_title').text()+'</td>'
			const price = '<td>'+$(item).find('.item_price > span').text()+'</td>'
			const num = '<td>'+$(item).find('.item_num > .num').val()+'</td>'
			const priceNum = '<td>'+$(item).find('.item_new_price > span').text()+'</td>'
			$('#order_title').after('<tr class="shopping_order">'+image+title+price+num+priceNum+'</tr>')
			
			const bookId = $(item).children('a:first').attr('href').replace(/\D+/,'')
			// 把数据放入订单中,(这里为了方便，直接放入总价)
			order.push({'bookId':bookId,'bookNum':$(item).find('.item_num > .num').val(),'bookPrice':$(item).find('.item_new_price > span').text()})
		}
	})
	// 设置商品数
	$('#newsubmit > div:eq(1) > p:first > span').text($('#select_num').text())
	// 设置价格
	$('#newsubmit > div:eq(1) > div > span:first > span:first > em').text($('#submit_price').text())

}
//结算跳转
$('#topay').off('click').on('click',function(){
	if(order){
		// 发post请求，完成业务
		$.post(
				'insertorder',
				{'order':JSON.stringify(order)},
				id=>{
					console.log(id)
					if(!id){
						// 没有id就回到首页
						location.href= ''
						return
					}
					
					// 如果成功了，自动跳转到首页
					if(confirm("确认支付？")){
						// 去支付订单，要拿到订单的id，发post请求
						if(buyBooks(id)!=0){ // 成功
							// 设置当前进度的样式
							$('#logo_and_progress > span').removeAttr('class')
							$('#logo_and_progress > span:last').attr('class','active')
							// 隐藏第二块区域
							$('#check_shop').hide()
							// 显示
							$('#backHome').show()
							
							// 最后5秒跳转到首页
							setInterval("redirect()", 1000);
							
							return;
						}
					}
					// 失败了(或者其他情况)，直接跳转到购物车
					location.href= ''
				}
		)
	}
})

// 购买业务
function buyBooks(orderId){
	// 拿到订单id，发post请求
	$.post(
		'buybook',
		{'orderId': orderId},
		data=>{
			if(data!='0'){
				// 支付成功
				alert('支付成功！！')
				return 1
			}else{
				// 支付失败
				alert('支付失败！！余额或者库存不足！')
				return 0
			}
		}
	)
}
